Управляемые базы данных. Apache Kafka
Компания LinkedIn в 2011 году разработала брокер сообщений Kafka. Сейчас Kafka — это отказоустойчивая распределенная стриминговая платформа с открытым исходным кодом, которая позволяет хранить, обрабатывать и доставлять огромные объемы данных в реальном времени.
Apache Kafka
Распределенные системы, как правило, состоят из множества сервисов: одни генерируют события (метрики, логи, события мониторинга, служебные события и т. д.), другие хотят эти данные получать. Kafka — гибрид распределенной базы данных и брокера сообщений с возможностью горизонтального масштабирования. Kafka собирает у приложений данные, хранит их в своем распределенном хранилище, группируя по топикам, и отдает компонентам приложения по подписке. При этом сообщения хранятся на различных узлах-брокерах, что обеспечивает высокую доступность и отказоустойчивость.
Топик — это способ группировки потоков сообщений в хранилище по категориям. Сервисы публикуют сообщения определенной категории в топик, а потребители подписываются на топик и читают из него сообщения. Для каждого топика Apache Kafka ведет лог сообщений, который может быть разбит на несколько разделов. Разделы — это последовательность сообщений топика в порядке поступления.
Сообщения сохраняются в так называемом журнале, долговременной упорядоченной структуре данных. Записи в журнал можно только добавлять, их нельзя ни изменять, ни удалять, а информация считывается слева направо, что гарантирует правильный порядок элементов.
Apache Kafka — это не СУБД в чистом виде, несмотря на то что она обеспечивает атомарность, согласованность, изолированность и долговечность хранимых данных, а также предоставляет возможность избирательного доступа к данным с помощью KSQL — SQL-движка на базе API Kafka Streams. Платформу используют как журнал фиксации и интеграционный центр для множества внешних СУБД и хранилищ.
Kafka vs RabbitMQ
Kafka часто сравнивают с другим популярным программным брокером сообщений и системой управления очередями — RabbitMQ. Обе системы используются для обмена информацией между приложениями, работают по схеме «издатель — подписчик» и обеспечивают репликацию сообщений. Однако они реализуют принципиально разные модели доставки сообщений: Kafka — pull (получатели сами достают из топика сообщения), а RabbitMQ — push (отправляет сообщения получателям).
Также RabbitMQ удаляет сообщение после доставки, а Kafka хранит его до запланированной очистки журнала. Таким образом, Apache Kafka сохраняет текущее и все прежние состояния системы и может использоваться как достоверный источник исторических данных. Это позволяет множеству потребителей читать одни и те же данные независимо, и такой паттерн удобен, например, в event-driven-системах.
У RabbitMQ очень гибкое управление очередями сообщений (маршрутизация, шаблоны доставки, мониторинг получения), но при большой нагрузке это приводит к снижению производительности. Поэтому для сбора и агрегации событий из множества источников, метрик и логов лучше использовать Apache Kafka, а RabbitMQ подходит для быстрого обмена сообщениями между несколькими сервисами.
Где применяется Kafka
Основное назначение Apache Kafka — это централизованный сбор, обработка, безопасное хранение и передача большого количества сообщений от отделенных друг от друга сервисов. Эта распределенная, горизонтально масштабируемая платформа обычно применяется там, где очень много больших неструктурированных данных:
- Масштабные IoT/IIoT-системы, характеризующиеся архитектурой с множеством датчиков, сенсоров, контроллеров и других конечных устройств.
- Системы аналитики. Например, Kafka используется в компаниях IBM и DataSift в качестве коллектора для мониторинга событий и трекера потребления потоков данных пользователями в режиме реального времени.
- Финансовые системы. Используют финансовые организации: Сбербанк, Тинькофф, Альфа-Банк, ING Bank.
- Социальные сети. В Twitter Kafka — часть инфраструктуры потоковой обработки, а в LinkedIn используется для потоковой передачи данных о деятельности и операционных показателях приложений.
- Системы геопозиционирования. Foursquare — для передачи сообщений между онлайн- и офлайн-системами, а также для интеграции средств мониторинга в свою big data инфраструктуру на базе Hadoop.
- Телеком-операторы. ВымпелКом, МТС, Ростелеком и др.
- Онлайн-игры. Например, Demonware, подразделение Activision Blizzard — для обработки логов пользователей.
Managed Service for Apache Kafka
Создание, настройка и управление кластерами Apache Kafka — очень сложная задача, требующая внимания сертифицированных специалистов. В Yandex.Cloud брокер сообщений предоставляется как управляемый сервис, управление и обслуживание которого производится на стороне облачной платформы. Пользователь может создавать и настраивать кластеры для решения своих задач, а управление брокерами, обновление и оптимизация работы Apache Kafka происходит автоматически.
Возможности управляемого сервиса Managed Service for Apache Kafka в Yandex.Cloud:
- Быстрое добавление брокеров в кластер.
- Распределение брокеров кластера между зонами доступности.
- Быстрое изменение ресурсов высокодоступной конфигурации без остановки работы и потери данных.
- Настройка политики очистки лога, типа сжатия и максимального количества сообщений для эффективного использования вычислительных, сетевых и дисковых ресурсов.
- Настройка репликации для обеспечения отказоустойчивости.
- Анализ метрики и состояния кластера.
- Автоматическая замена узлов кластера при отказе.
- Шифрование соединений при помощи протокола TLS. Механизм SASL контролирует доступ пользователей к топикам по спискам контроля доступа (ACL).
- Соответствие требованиям 152-ФЗ, индустриальным стандартам ISO и GDPR.
Managed Service for Apache Kafka вместе с другими управляемыми сервисами Yandex.Cloud позволяет создавать на облачной платформе витрины данных. Например, Yandex Managed Service for ClickHouse отлично справляется с обработкой запросов к большим объемам данных, Yandex Data Proc автоматически создаст и настроит кластеры Spark, Hadoop и другие компоненты, а Yandex DataLens позволит визуализировать эти данные и построить отчеты. С помощью Apache Kafka можно поставлять данные напрямую в ClickHouse без дополнительной разработки.
console.cloud.yandex.ru/link/managed-kafka/